name: CI

on:
  push:
    branches:
      - main
      - 'releases/**'
  pull_request:
    branches:
      - '*'

env:
  DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}

jobs:
  Linux:
    runs-on: ubuntu-latest
    permissions:
      contents: write # required for submitting a dependency graph
    steps:
    - name: Check out repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 1
    - name: Install Graphviz
      run: |
        sudo apt-get update
        sudo apt-get install graphviz
    - name: Install GraalVM
      uses: graalvm/setup-graalvm@v1
      with:
        distribution: graalvm-community
        version: 'latest'
        java-version: '21'
        github-token: ${{ secrets.GITHUB_TOKEN }}
    - name: Build
      uses: ./.github/actions/main-build
      with:
        arguments: |
          -Ptesting.enableJaCoCo \
          build \
          jacocoRootReport
    - name: Upload to Codecov.io
      uses: codecov/codecov-action@v4
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
    - name: Run Asciidoctor
      uses: ./.github/actions/run-gradle
      with:
        arguments: |
          prepareDocsForUploadToGhPages \
          --no-configuration-cache

  Windows:
    runs-on: windows-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 1
    - name: Build
      uses: ./.github/actions/main-build

  macOS:
    runs-on: macos-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 1
    - name: Build
      uses: ./.github/actions/main-build

  publish_artifacts:
    name: Publish Snapshot Artifacts
    needs: linux
    runs-on: ubuntu-latest
    permissions:
      attestations: write # required for build provenance attestation
      id-token: write # required for build provenance attestation
    if: github.event_name == 'push' && github.repository == 'junit-team/junit5' && (startsWith(github.ref, 'refs/heads/releases/') || github.ref == 'refs/heads/main')
    steps:
    - name: Check out repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 1
    - name: Publish
      uses: ./.github/actions/run-gradle
      env:
        ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
        ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
      with:
        arguments: |
          publish -x check \
          prepareGitHubAttestation \
          --no-configuration-cache
    - name: Generate build provenance attestations
      uses: actions/attest-build-provenance@bdd51370e0416ac948727f861e03c2f05d32d78e # v1.3.2
      with:
        subject-path: documentation/build/attestation/*.jar

  update_documentation:
    name: Update Snapshot Documentation
    concurrency:
      group: github-pages
      cancel-in-progress: true
    needs: Linux
    runs-on: ubuntu-latest
    if: github.event_name == 'push' && github.repository == 'junit-team/junit5' && github.ref == 'refs/heads/main'
    steps:
    - name: Check out repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 1
    - name: Install Graphviz
      run: |
        sudo apt-get update
        sudo apt-get install graphviz
    - name: Upload Documentation
      uses: ./.github/actions/run-gradle
      with:
        arguments: |
          gitPublishPush \
          -Dscan.tag.Documentation \
          --no-configuration-cache
      env:
        GRGIT_USER: ${{ secrets.GH_TOKEN }}
